package TpFinal;

import java.util.concurrent.Semaphore;

public class Celda {

	protected int x;
	protected int y;
	protected Semaphore bloqueo;
	private boolean esDeCalle = false;
	private int posicionDeCalle;
	private String nombreDeCalle;
	
	public Celda(int posicionDeCalle,String nombreDecalle){	
		this.bloqueo = new Semaphore(1);
		this.esDeCalle = true;
		this.posicionDeCalle = posicionDeCalle;
		this.nombreDeCalle = nombreDecalle;
	}
	
	public Celda(int x, int y){
		this.x = x;
		this.y = y;
		this.bloqueo = new Semaphore(1);
	}
	/**
	 * Permite posicionarse en la celda si nadie esta en ella
	 * esto se verifica usando un semaforo 
	 */
	public void posicionarse(Auto auto){
		this.getBloqueo().acquireUninterruptibly();
	}
	/**
	 * Libera la celda que estaba ocupando
	 * haciendo un release en el semaforo de la celda
	 */
	public void dejarPosicion(){
		this.getBloqueo().release();
	}

	@Override
	public String toString() {
		if(this.esDeCalle)
			return this.posicionDeCalle + " de "+ this.nombreDeCalle;
		else
			return "("+this.getX()+","+this.getY()+")";
	}
	// Getters & Setters
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public Semaphore getBloqueo() {
		return bloqueo;
	}
	public void setBloqueo(Semaphore bloqueo) {
		this.bloqueo = bloqueo;
	}
}
